package com.feng.util;

public class ArraysTest{
	
	/*
	 *一维数组元素的引用
	 */
	public void newArray(){
		int[] intArray;//声明了一个整型数组,数组中的每个元素为整型数据
		intArray = new int[10];
		System.out.println(intArray);
		//System.out.println(intArray[1]);
		int i = 0;
		for(i=0;i<10;i++)
		{
			intArray[i] = i;
			System.out.println(intArray[i]);
		}
	}
	/*
	 *一维数组的初始化
	 */
	 public void initArray(){
	 	//int[] a = {1,2,3,4,5};
	 	//Fibonacci数列的定义为：F1=F2=1,Fn=Fn-1+Fn-2(n＞=3)
		int i = 0;
		int[] f = new int[10];
		f[0] = f[1] = 1;
		for(i = 2;i < 10;i++) 
		f[i] = f[i-1] + f[i-2];
		for(i = 1;i < 10;i++)
		System.out.println(f[i]);
	 }
	 /*
	  *相邻的两个元素进行比较,并把小的元素交到前面
	  */
	 public void BubbleSort(){
	 	int i,j;
	 	int[] a = {1,13,36,8,12,2,5,21,17};
	 	int l = a.length;
	 	System.out.println(a.length);
	 	for(i = 0;i < l-1;i++)
	 		for(j = i+1;j < l;j++){
	 			if(a[i] > a[j])
	 			{
	 				int t = a[i];
	 				a[i] = a[j];
	 				a[j] = t;
	 			}
	 		}
 		for(i = 0;i < l;i++){
 			System.out.println(a[i]);
 		}
	 }
	 //二维数组的初始化
	public void initArrays(){
		//1.(静态初始化方法) 在定义数组的同时进行初始化 
		//定义了一个3×2的数组,并对每个元素赋值
		int[][] a = {{2,6},{32,61},{32,16}};
		int[][] aa = {{3,6},{1,7,2},{6}};
		//2.直接对每个元素进行赋值
		//...
		/*由于Java用数组的数组来实现多维数组,并且在创建时不必指定每一维的大小,
		 *因此,我们可以实现非方形数组。如下例中实现的三角形数组：
		 */
		double myMatrix[][]={{1.0},{1.8,4.9},{3.6,2.9,0.0}};
		//直接为每一维分配空间
		int [][] b = new int[2][3];
		//从最高维开始,分别为每一维分配空间
		/*
		 *创建规则 ：最前面的n维(n>=1)必须被指定大小,而后可以跟m个未指定大小
		 *的维,这样的分配是一个n维分配,虽然整个数组是n+m维数组,后面的m维将
		 *在程序执行中陆续分配。
		 */
		int [][] c = new int[2][];
		c[0] = new int[3];
		c[1] = new int[3];
	}
	//两个矩阵Am×n、Bn×l相乘得到Cm×l,每个元素Cij=aik*bk (i=1..m,n=1..n)
	public void MatrixMultiply(){
		int i,j,k;
		int a[][]=new int[2][3];
		int b[][]={{1,5,2,8},{5,9,10,-3},{2,7,-5,-18}};
		int c[][]=new int[2][4];
		for(i=0;i<2;i++)
			for(j=0;j<3;j++)
			a[i][j]=(i+1)*(j+2);
			for(i=0;i<2;i++){
				for(j=0;j<4;j++){
					c[i][j]=0;
					for(k=0;k<3;k++)
					c[i][j]+=a[i][k]*b[k][j];
				}
			}
		System.out.println("\n***MatrixA***");
		for(i=0;i<2;i++){
			for(j=0;j<3;j++)
				System.out.print(a[i][j]+" ");
			System.out.println();
		}
		System.out.println("\n***MatrixB***");
		for(i=0;i<3;i++){
			for(j=0;j<4;j++)
				System.out.print(b[i][j]+" ");
			System.out.println();
		}
		System.out.println("\n***MatrixC***");
		for(i=0;i<2;i++){
			for(j=0;j<4;j++)
				System.out.print(c[i][j]+" ");
			System.out.println();
		}
	}
	
	public static void main(String args[]){
		ArraysTest at = new ArraysTest();
		//at.newArray();
		//at.initArray();
		//at.BubbleSort();
		//at.initArrays();
		at.MatrixMultiply();
	}
}